View有一个方法setVisibility,作用是可以控制视图的显示和隐藏,int类型的参数可以传入三种值View.VISIBLE, View.GONE, View.INVISIBLE,其中VISIBILE表示设置视图显示,GONE和INVISIBLE设置视图隐藏,区别在于前者隐藏后不占用视图空间,而后者隐藏后依然占用视图空间。具体不同看下源码:
/**
* Set the enabled state of this view.
*
* @param visibility One of {@link #VISIBLE} , {@link #INVISIBLE}, or {@link #GONE} .
* @attr ref android.R.styleable#View_visibility
*/
@RemotableViewMethod
public void setVisibility( int visibility) {
// 针对参数VISIBLE, INVISIBLE, GONE三种情况进行处理
setFlags(visibility, VISIBILITY_MASK);
if (mBGDrawable != null) mBGDrawable.setVisible(visibility == VISIBLE, false);
}
从setVisibility方法的源码可以看出,setFlags很关键,下面来看看其源码: